/*
 * @Description:
 * @Author: wlj
 * @Date: 2022-12-22 16:33:00
 * @LastEditors: wlj
 * @LastEditTime: 2023-01-04 17:28:26
 * @FilePath: \my-vite-app\src\store\module\user.ts
 */
import { defineStore } from 'pinia'

// 第一个参数是应用程序中store的唯一id
export default defineStore('users', {
  state: () => {
    return {
      name: 'lily',
      age: 18,
      sex: '女'
    }
  },
  getters: {
    getAge: state => {
      return state.age + 100
    },
    isAdult: state => {
      return state.age >= 18 ? '成年人' : '未成年'
    },
    // 函数传参
    getAddAge: state => {
      return (num: number = 0) => state.age + num
    },
    // 访问自身的getter（isAdult）
    ageMsg: state => {
      return `${state.age}岁${state.isAdult}`
    },
    // getter中使用this,但是TS无法推导类型，需要手动指定返回值类型
    // 页面中用法：getNameAndAge
    getNameAndAge(): string {
      return this.name + this.getAddAge() // 调用其它getter
    }
  },
  actions: {
    saveName(name: string) {
      this.name = name
    }
  },
  // 数据持久化
  // persist: true, // 默认存入localStorage
  persist: {
    // key: "user", // 指定键名，未指定则为defineStore第一个参数名
    storage: sessionStorage, // 存入sessionStorage
    paths: ['name'] // 需要缓存的字段
  }
})
